\chapter{Projekt - możliwości GUI}
\label{cha:gui}

W aplikacji Systemu Rozstrzygania Konkursów Internetowych warstwę pośrednią
między użytkownikiem a serwisem stanowi strona internetowa. Ta warstwa
prezentacji zawiera wszelkie możliwości interakcji klienta z serwisem.
GUI przystosowane jest do wykorzystywania przez dwa rodzaje użytkowników
\begin{itemize}
  \item Użytkownika - każdy klient serwisu z utworzonym kontem Facebook lub
  Twitter
  \item Administratora - osoba z uprawnieniami przewyższającymi zwykłego klienta
  serwisu 
\end{itemize}

\section{Użytkownik}


\subsection{Przypadki użycia}
Użytkownik posiada ograniczonę rolę do podstawowych czynności dostarczanych
przez system. Przypadki użycia użytkownika zaprezentowano na
Rys. \ref{fig:usecaseUser}.

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.85]{usecase_klient} 
\caption{Przypadki użycia - użytkownik}
\label{fig:usecaseUser}
\end{center}
\end{figure}


Do systemu zalogować się można poprzez Facebook, Twitter za pośrednictwem
mechanizmu pojedynczego uwierzytelnienia(Simple Sign-On) oraz jako
administrator. .

\subsection{Single Sign-On}

Uwierzytelnienie będące podstawowym mechanizmem bezpieczeństwa informacji należy rozumieć jako proces potwierdzenia tożsamości użytkownika. Jeśli ma miejsce poprawne uwierzytelnienie, wówczas zachodzi pewność, iż użytkownik jest tym za kogo się podaje.

Potrzeba uwierzytelnienia wzrosła w dobie Internetu z uwagi na rozpowszechnienie
pracy zdalnej przy jednoczesnym ograniczeniu możliwości identyfikowania
użytkowników fizycznie, czy osobiście. Wymagane zatem jest aby omawiany
mechanizm był starannie zaimplementowany w każdym systemie, a przede wszystkim w
aplikacji www.

Pojedyncze logowanie (Single Sign-On) to proces uwierzytelnienia podmiotu, który pozwala na jednokrotne wprowadzenie danych uwierzytelniających (np. login i hasło ), a następnie na dostęp usług bez ponownego wprowadzania tych danych.

Im więcej przeróżnych aplikacji i systemów dostępnych dla użytkowników, tym
więcej może być odmiennych sposobów uzyskania uprawnionego dostępu do ich
zasobów. Z reguły duże firmy i korporacje nie wykorzystują jednorodnych
rozwiązań, a są one tworzone i dostarczane przez wielu dostawców na bazie
rożnych technologii, a także mogą spełniać zupełnie rozbieżne oczekiwania
poszczególnych działów organizacji. To powoduje, że nie jest łatwe (lub jest
niemożliwe) opracowanie jednakowego sposobu logowania do wszystkich dostępnych
systemów. Oczywiście, im więcej różnych systemów z odmiennymi metodami
logowania, dopuszczalną składnią haseł, czy też częstotliwością wymuszenia
zmiany hasła na nowe (co 30 dni, co 90 dni, a nawet wcale), tym więcej danych
dostępowych do zapamiętania i~tym większe ryzyko nieumyślnego ich ujawnienia,
utraty, czy zapomnienia\cite{sso}.

Działanie systemu pojedynczego uwierzytelnienia przedstawia Rys. \ref{fig:sso}.
\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.7]{sso} 
\caption{Działanie SSO(źródło:
http://www.mariuszlipinski.pl/2008/04/mechanizm-pojedynczego-uwierzytelnienia.html)}
\label{fig:sso}
\end{center}
\end{figure}

\subsection{Logowanie}
Po uruchomieniu aplikacji klienckiej klientowi przedstawiona jest strona
logowania prezentowana na Rys. \ref{fig:guiLogowanie}.

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.7]{login_page} 
\caption{Panel logowania}
\label{fig:guiLogowanie}
\end{center}
\end{figure}



\subsection{Tworzenie wydarzenia}
Po poprawnym logowaniu użytkownik ma do dyspozycji dwie opcje:
\begin{itemize}
  \item Stworzenie wydarzenia
  \item Obejrzenie wydarzenia
\end{itemize}

Stronę umożliwiającą stworzenie wydarzenia zaprezentowano na Rys.
\ref{fig:guiCreateEvent}.

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.6]{create_event} 
\caption{Tworzenie wydarzenia}
\label{fig:guiCreateEvent}
\end{center}
\end{figure}

\subsection{Obejrzenie wydarzenia}
Stronę umożliwiającą obejrzenie wydarzenia zaprezentowano na
Rys. \ref{fig:guiWatchEvent}. 

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.7]{watch_event} 
\caption{Obejrzenie wydarzenia}
\label{fig:guiWatchEvent}
\end{center}
\end{figure}

Konkurs może mieć trzy stany:
\begin{itemize}
  \item Nierozpoczęty
  \item Trwający
  \item Zakończony
\end{itemize}

Strona dotycząca prezentacji konkursu odpowiednio informuje o jego stanie z
adekwatnymi możliwościami np. poinformowaniem innych o zakończonym losowaniu.
Jest to realizowane przy użyciu API dostarczanych przez zewnętrzne serwisy
Facebook oraz Twitter. Przykładową stronę z zakończonym losowaniem i wyłonionym
zwycięzcą zaprezentowano  na Rys. \ref{fig:guiWinnerFound}.

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.6]{winner} 
\caption{Wyłoniony zwycięzca} 
\label{fig:guiWinnerFound}
\end{center}
\end{figure}

\section{Administrator}

\subsection{Przypadki użycia}
Administrator posiada rozszerzone możliwości służące zarządzaniu wydarzeniami
oraz użytkownikami. Przypadki użycia administratora przedstawiono na
Rys. \ref{fig:usecaseAdministrator}.
\begin{figure}[ht!]
\includegraphics[scale=1.0]{usecase_administrator} 
\caption{Przypadki użycia - administrator}
\label{fig:usecaseAdministrator}
\end{figure}

\subsection{Panel administracyjny}

Administrator po zalogowaniu ma do dyspozycji panel administracyjny widoczny na
Rys. \ref{fig:guiAdminPanel}, z~którego może wykonywać akcje służące zarządzaniu
serwisem.
\begin{itemize}
  \item Zarządzanie użytkownikami
  \item Zarządzanie konkursami
\end{itemize}


\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.6]{admin_panel} 
\caption{Panel administracyjny}
\label{fig:guiAdminPanel}
\end{center}
\end{figure}

Panel zarządzania użytkownikami przedstawiono na
Rys. \ref{fig:guiZarzadzanieUzytkownikami}.

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.7]{manage_users} 
\caption{Panel zarządzania użytkownikami}
\label{fig:guiZarzadzanieUzytkownikami}
\end{center}
\end{figure}

Panel zarządzania wydarzeniami przedstawiono na
Rys. \ref{fig:guiZarzadzanieWydarzeniami}.

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.6]{manage_events} 
\caption{Panel zarządzania wydarzeniami}
\label{fig:guiZarzadzanieWydarzeniami}
\end{center}
\end{figure}

\subsection{Panel wiadomości} 
Administrator ponadto zajmuje się obsługą zgłaszanych problemów przez
użytkowników. Takowe żądania realizowane są poprzez panel wiadomości widoczny na
Rys. \ref{fig:guiPanelWiadomosci}.

\begin{figure}[ht!]
\begin{center}
\includegraphics[scale=0.6]{send_notification} 
\caption{Panel wiadomości}
\label{fig:guiPanelWiadomosci}
\end{center}
\end{figure}